• 问题

    Java有一个数据类型由两部分组成,包含基本类型(primitive),如int、double和boolean,和引用类型(reference type),如String和List。 每个基本类型都有一个对应的引用类型,称为装箱基本类型(boxed primitive)。由于Java自动装箱和拆箱机制,会使得在实际开发中基本类型和装箱类型混用,那么它们之间有什么区别?

  • 解决

    1. 基本类型和装箱类型主要有3个主要区别:

      • 基本类型只有值,而装箱类型具有和它们值不同的统一性,即new Integer(42)==new Integer(42),虽然这两个装箱类型都是表示数字42,但是同一性判断会返回false
      • 基本类型只具有具体功能值,如数值等,而装箱类型还具有非功能值null
      • 基本类型通常要比装箱类型更节省空间和运行时间。

      注意:如果基本类型和装箱类型混合使用,装箱类型会拆箱为基本类型,这时,如果装箱类型为null,就会容易报NullPointException

    2. 什么时候用装箱类型

      • 在使用集合时,键、值都只能使用装箱类型;
      • 使用参数化类型时,如ThreadLocal类时,只能使用装箱类型
  • 结论

    当可以选择的时候,基本类型要优先于装箱类型。基本类型更加方便简单,性能更好。如果没办法避免使用装箱类型时,注意类型间同一性的比较,以及NullPointException。

results matching ""

    No results matching ""